<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script>
			window.onload = function(){
				/*
				 * 方式一: 原型链继承
				 * 1.套路
				 * 		a. 定义父类型的构造函数
				 * 		b. 给父类型的原型添加方法
				 * 		c. 定义子类型的构造函数
				 * 		d. 创建父类型的对象赋值给子类型的原型
				 * 		e. 给子类型原型添加方法
				 * 		f. 创建子类型的对象: 可以调用父类型的方法
				 * 2. 关键
				 * 		a. 子类型的原型为父类型的一个实例对象
					// 父类型
					function Super(){
						this.supProp = "Supper property"
					}
					Super.prototype.showSupperProp = function(){
						console.log(this.supProp)
					}
					
					// 子类型
					function Sub(){
						this.subProp = "Sub property"
					}
					
					// 子类型的原型为父类型的一个实例对象
					Sub.prototype = new Super()
					sub.prototype.constructor = Sub
					Sub.prototype.showSubProp = function(){
						console.log(this.subProp)
					}
					
					var sub = new Sub()
					sub.showSupperProp()
					sub.toString()
				 */
				
				/*
				 * 方式2: 借用构造函数继承(假的)
				 * 	1. 套路: 定义父类型构造函数
				 * 		a. 定义父类型构造函数
				 * 		b. 定义父类型构造函数
				 * 		c. 在子类型构造函数中调用父类型构造
				 *  2. 关键
				 * 		a. 在子类型构造函数中通过调用call()调用父类型构造函数
					function Person(name, age){
						this.name = name
						this.age = age
					}
					function Student(name, age, price){
						Person.call(this, name, age)
						this.price = price
					}
					
					var stu = new Student("tom", 18, 1500)
					console.log(stu)
				 */
				
				/*
				 * 方式三: 原型链+借用构造函数的组合继承
				 * 	1. 使用原型链实现对父类型对象的方法继承
				 * 	2. 利用super()借用父类型构造函数初始化相同属性
				 */
				function Person(name, age){
					this.name = name
					this.age = age
				}
				Person.prototype.setName = function(name){
					this.name = name
				}
				
				function Student(name, age, price){
					Person.call(this, name, age)  // 为了得到属性
					this.price = price
				}
				
				Student.prototype = new Person()  // 为了能看到父类型的方法
				Student.prototype.constructor = Student  // 修正constructor的属性
				Student.prototype.setPrice = function(price){
					this.price = price
				}
				var stu = new Student("tom", 24, 1500)
				stu.setName("Bob")
				stu.setPrice(16000)
				console.log(stu)
			}
		</script>
	</head>
	<body>
	</body>
</html>
